package chapter11.section6;

import java.util.LinkedList;

/* 程序 QueueMachine：增加了线程通信的排队机 */
public class QueueMachine {
    // 这里使用了LinkedList作为保存待处理业务的集合，主要是因为它的先进先出机制
    private final LinkedList<Transaction> transactionQueue = new LinkedList<Transaction>();

    // 判断排队机中是否还有业务等待处理
    public boolean isEmpty() {
        return transactionQueue.isEmpty();
    }

    //银行职员线程调用get方法
    public synchronized Transaction get() throws InterruptedException {
        while (transactionQueue.isEmpty()) {
            this.wait();
        }
        Transaction tran = transactionQueue.poll();
        return tran;
    }

    //业务发生器线程调用add方法,向排队机增加一项待处理业务
    public synchronized void add(Transaction tran) {
        this.transactionQueue.add(tran);
        this.notifyAll();
    }
}
